const AC_GAME_OBJECTS = [];
export class AcGameObject{
  constructor(){
    AC_GAME_OBJECTS.push(this); // 把当前对象添加到游戏对象数组中
    this.timedelta = 0; // 当前帧距离上一帧的时间间隔
    this.has_called_start = false; // 是否执行过start函数
  }
  start(){ // 初始化，只会执行一次
  }
  update(){ // 每帧调用，会执行多次(除了第一帧)
  }
  on_destroy(){ // 删除前执行一次
  }
  destroy(){ // 删除对象
    this.on_destroy();
    for(let i in AC_GAME_OBJECTS){//in是遍历游戏对象数组索引
      if(AC_GAME_OBJECTS[i] === this){
        AC_GAME_OBJECTS.splice(i, 1); // 删除元素
        break;
      }
    }
  }
}
let last_timestamp; // 上一帧的时刻
const step = (timestamp) => { // timestamp表示当前帧的时间戳
  for(let obj of AC_GAME_OBJECTS){
    if(!obj.has_called_start){ // 如果没有执行过start
      obj.has_called_start = true;
      obj.start(); // 执行start函数
    }else{
      obj.timedelta = timestamp - last_timestamp; // 计算时间间隔
      obj.update(); // 执行update函数
    }
  }
  last_timestamp = timestamp;
  requestAnimationFrame(step);
}
requestAnimationFrame(step);